package com.heima.behavior.service.impl;

import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.heima.behavior.service.ApArticleRelationService;
import com.heima.behavior.service.ApBehaviorEntryService;
import com.heima.behavior.service.ApLikesBehaviorService;
import com.heima.behavior.service.ApUnlikesBehaviorService;
import com.heima.model.behavior.dtos.ApArticleRelationDto;
import com.heima.model.behavior.pojos.ApBehaviorEntry;
import com.heima.model.behavior.pojos.ApLikesBehavior;
import com.heima.model.behavior.pojos.ApUnlikesBehavior;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.HashMap;
import java.util.Map;

@Service
public class ApArticleRelationServiceImpl implements ApArticleRelationService {

    @Autowired
    ApBehaviorEntryService apBehaviorEntryService;

    @Autowired
    ApLikesBehaviorService apLikesBehaviorService;

    @Autowired
    ApUnlikesBehaviorService apUnlikesBehaviorService;

    /**
     * 查询用户文章的点赞\不喜欢
     * @param dto
     * @return
     */
    @Override
    public Map findApArticleRelation(ApArticleRelationDto dto) {

        Map<String, Object> resultMap = new HashMap<>();
        resultMap.put("islike", false);  // 点赞
        resultMap.put("isunlike", false); // 不喜欢


        //1 参数校验
        if (dto == null || dto.getArticleId() == null || dto.getEntryId() == null) {
            return resultMap;
        }

        // 查询行为实体
//        ApUser user = AppThreadLocalUtils.getUser();
//        if (user == null) {
//            return resultMap;
//        }
        ApBehaviorEntry behaviorEntry = apBehaviorEntryService
                .findByUserIdOrEquipmentId(dto.getEntryId(), null);
        if (behaviorEntry == null) {
            return resultMap;
        }

        //2 查询点赞
        ApLikesBehavior likesBehavior = apLikesBehaviorService.getOne(Wrappers.<ApLikesBehavior>lambdaQuery()
                .eq(ApLikesBehavior::getEntryId, behaviorEntry.getId())
                .eq(ApLikesBehavior::getArticleId, dto.getArticleId())
                .eq(ApLikesBehavior::getType,ApLikesBehavior.Type.ARTICLE.getCode() )
                .eq(ApLikesBehavior::getOperation, ApLikesBehavior.Operation.LIKE.getCode())  // 点赞
        );
        if (likesBehavior != null) {
            resultMap.put("islike", true);  // 点赞
        }


        //3 查询不喜欢
        ApUnlikesBehavior unlikesBehavior = apUnlikesBehaviorService.getOne(Wrappers.<ApUnlikesBehavior>lambdaQuery()
                .eq(ApUnlikesBehavior::getEntryId, behaviorEntry.getId())
                .eq(ApUnlikesBehavior::getArticleId, dto.getArticleId())
                .eq(ApUnlikesBehavior::getType,ApUnlikesBehavior.Type.UNLIKE.getCode())
        );
        if (unlikesBehavior != null) {
            resultMap.put("isunlike", true);  // 点赞
        }

        //4 返回结果（3个值）
        resultMap.put("entryId", behaviorEntry.getId());  // 行为实体主键

        return resultMap;
    }
}
